<?php

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

namespace app\index\controller\finance;

/**
 * 微派公众号支付
 *
 * @author SoChishun
 */
class WiipaywxController extends \app\index\controller\BaseController {

    public function wiipaywxAction() {
        return view();
    }

    // 微派wPay
    public function dowiipaywxAction() {
        $request = \think\Request::instance();
        $request->only(['amount', 'token']);
        $data = $request->post();
        $recharge = new \app\index\model\finance\RechargeModel();
        $result = $recharge->saveRecharge($data, $this->loginInfo['id'], 'cz', 'wiipaywx');
        if (!$result['success']) {
            return $result;
        }
        $out_trade_no = $result['message']['out_trade_no'];
        $amount = $data['amount'];

        $product = '充值' . $amount . '元';
        $url = 'http://api.xiipay.com/Pay';
        $params = [
            'amount' => $amount, // 金额（单位为分），非空
            'backurl' => url('finance.recharge/history'), // 支付结束跳转地址，非空
            'desc' => $product, // 商品描述，200 位以内，可以为空
            'extra' => $out_trade_no, // 透传参数，32 位以内，可以为空
            'merch' => 0, // 商户id，平台分配
            'notifyurl' => url('finance.wiipaywx/notify'), // 同步地址，非空
            'product' => $product, // 商品名称，64 位以内，非空
            'type' => 1, // 支付场景，固定填1
        ];
        ksort($params);
        $strparams = http_build_query($params);
        $sign = md5($strparams);
        $url = $url . '?' . $strparams . '&sign=' . $sign;
        /*
         * MD5.md5("amount="+amount+"&backurl="+backurl+"&desc="+desc+"&extra="+extra+"&merch
          ="+merch+"&notifyurl="+notifyurl+"&product="+product+"&type="+type+"&key="+mch_secret);
         */
        redirect($url)->send();
    }

    public function notifyAction() {
        /*
         * 响应参数:
          err : 错误码，为0 时表示订单请求成功，不为0 表示订单生成失败，具体原因将会在返回
          的msg 参数声明msg : 订单生成失败原因
          order : 平台生成的唯一订单号，32 位
          payurl : 支付链接，订单生成成功后，商户引导用户跳转至此页完成后续支付流程
         */
        /*
         * amount : 金额（单位为分），非空
          extra : 透传参数，32 位以内，可以为空
          order : 平台生成的唯一订单号，32 位
          time : 支付完成时间，unix 时间戳
          sign : 签名算法见附表二
         */
        $request = \think\Request::instance();
        $data = $request->only(['amount', 'extra', 'order', 'time', 'sign',])->param();
        if (empty($data['order']) || empty($data['sign'])) {
            echo 'success';
            exit;  // 交易单号无效
        }
        $key = 'CRCBwJce5ku88n8LSEbRWTg5dWAkJBiq'; //签名所需key,联系运营人员获取
        $sign = $data['sign'];
        unset($data['sign']);
        $data['key'] = $key;
        ksort($data);
        $signtmp = md5(http_build_query($data));
        if ($sign != $signtmp) {
            echo 'success';
            return; // 签名无效
        }
        $out_trade_no = $data['extra'];
        $recharge = new \app\index\model\finance\RechargeModel();
        $result = $recharge->rechargeConfirm($out_trade_no, $this->loginInfo['id']);
        if (!$result['success']) {
            echo 'success';
            exit; //$result['message'];
        }
        echo 'success';
        /*
         * MD5.md5("amount="+amount+"&extra="+extra+"&order="+order+"&time="+time+"&key="+mc
          h_secret);
         */
    }

    public function backurlForXiipay() {
        /*
         * 用户支付成功后，平台将引导用户跳转回此页，跳转过程会带上以下参数
          status : 支付状态，0 为成功，1 为失败或取消
          商户应在此页显示响应的提示，但出于安全原因，不能以此作为支付成功的凭证，支付成
          功凭证仅能以同步接口传递的数据为准
         */
        $request = \think\Request::instance();
        $data = $request->param();
        var_export($data);
    }

}
